<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- scripting.qdoc -->
<head>
  <title>Scripting Example</title>
  <link href="classic.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
</tr></table><h1 class="title">Scripting Example<br /><span class="subtitle"></span>
</h1>
<p>This example demonstrates the combination of Javascript and a trivial plugin, and the use of a plugin in combination with a form.</p>
<p>If the browser supports scripting plugins, and everything is set up correctly, the plugin below should react to mouse clicks and drags by changing its text. The <tt>About...</tt> button should pop up an <tt>About Qt</tt> dialog. The second plugin instance, below the horizontal line, should display the word <tt>QtBrowserPlugin</tt>, and pressing the <tt>Go</tt>! button should navigate the browser to a search for this word at google.com.</p>
  <object id="ScriptableObject" TYPE=trivial/very WIDTH=200 HEIGHT=100 text="Very Scriptable!"> </object>

  <script language=JavaScript>
  var ScriptableObject = document.getElementById('ScriptableObject');
  ScriptableObject.text = 'This is some text'

  var oldText
  ScriptableObject.mouseDown = function()
  {
    oldText = ScriptableObject.text
    ScriptableObject.text = 'Mouse Down'
  }

  ScriptableObject.mouseMove = function(x, y)
  {
    ScriptableObject.text = 'Mouse at ' + x + ',' + y
  }

  ScriptableObject.mouseUp = function()
  {
    ScriptableObject.text = oldText
  }
  </script>

  <!-- Special hookup code required for Internet Explorer -->
  <!--[if IE]>
  <script language=JScript>
  function ScriptableObject::mouseDown() { ScriptableObject.mouseDown() }
  function ScriptableObject::mouseMove(x, y) { ScriptableObject.mouseMove(x, y) }
  function ScriptableObject::mouseUp() { ScriptableObject.mouseUp() }
  </script>
  <![endif]-->

  <form>
  <input type="button" value="About..." OnClick="ScriptableObject.about();"/>
  </form>

  <hr>
  <form method="GET" action="http://www.google.com/search">
  Search at Google:
  <object id="SearchableText" name="q" type=trivial/very width=150 height=40 text="QtBrowserPlugin"></object>
  <input type="submit" value="Go!">
  </form>
  <p>Implementation:</p>
<pre><span class="comment"> /****************************************************************************
 **
 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/legal
 **
 ** This file is part of the Qt Solutions component.
 **
 ** You may use this file under the terms of the BSD license as follows:
 **
 ** &quot;Redistribution and use in source and binary forms, with or without
 ** modification, are permitted provided that the following conditions are
 ** met:
 **   * Redistributions of source code must retain the above copyright
 **     notice, this list of conditions and the following disclaimer.
 **   * Redistributions in binary form must reproduce the above copyright
 **     notice, this list of conditions and the following disclaimer in
 **     the documentation and/or other materials provided with the
 **     distribution.
 **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
 **     the names of its contributors may be used to endorse or promote
 **     products derived from this software without specific prior written
 **     permission.
 **
 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 ** &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&quot;
 **
 ****************************************************************************/</span>

 #include &lt;QtGui&gt;
 #include &lt;qtbrowserplugin.h&gt;

 class Trivial : public QWidget
 {
     Q_OBJECT
     Q_PROPERTY(QString text READ text WRITE setText)

     Q_CLASSINFO(&quot;ClassID&quot;, &quot;{5a22176d-118f-4185-9653-9f98958a6df8}&quot;)
     Q_CLASSINFO(&quot;InterfaceID&quot;, &quot;{2df735ba-da4f-4fb7-8f35-b8dfbf8cfd9a}&quot;)
     Q_CLASSINFO(&quot;EventsID&quot;, &quot;{449de213-f8bd-4d2e-a2cf-eab407c03245}&quot;)

     Q_CLASSINFO(&quot;MIME&quot;, &quot;trivial/very:xxx:Trivial and useless&quot;)
     Q_CLASSINFO(&quot;ToSuperClass&quot;, &quot;Trivial&quot;)
     Q_CLASSINFO(&quot;DefaultProperty&quot;, &quot;text&quot;)

 public:
     Trivial(QWidget *parent = 0)
         : QWidget(parent)
     {
         m_text = QString::fromLatin1(&quot;Empty&quot;);
     }

     void mousePressEvent(QMouseEvent *)
     {
         mouseDown();
     }
     void mouseMoveEvent(QMouseEvent *e)
     {
         mouseMove(e-&gt;x(), e-&gt;y());
     }
     void mouseReleaseEvent(QMouseEvent*)
     {
         mouseUp();
     }
     QString text() const
     {
         return m_text;
     }

 public slots:
     void about()
     {
         QMessageBox::aboutQt(this);
     }
     void setText(const QString &amp;text)
     {
         m_text = text;
         update();
     }

 signals:
     void mouseDown();
     void mouseMove(int x, int y);
     void mouseUp();

 protected:
     void paintEvent(QPaintEvent*)
     {
         QPainter p(this);
         QRect r(rect());
         r.adjust(0, 0, -1, -1);

         p.drawRect(r);
         p.drawText(r, Qt::AlignCenter, m_text);
     }

 private:
     QString m_text;
 };

 #include &quot;trivial.moc&quot;

 QTNPFACTORY_BEGIN(&quot;Trivial Qt-based Plugin&quot;, &quot;A Qt-based LiveConnected plug-in that does nothing&quot;)
     QTNPCLASS(Trivial)
 QTNPFACTORY_END()

 #ifdef QAXSERVER
 #include &lt;ActiveQt/QAxFactory&gt;
 QAXFACTORY_BEGIN(&quot;{aa3216bf-7e20-482c-84c6-06167bacb616}&quot;, &quot;{08538ca5-eb7a-4f24-a3c4-a120c6e04dc4}&quot;)
     QAXCLASS(Trivial)
 QAXFACTORY_END()
 #endif</pre>
<p /><address><hr /><div align="center">
<table width="100%" cellspacing="0" border="0"><tr class="address">
<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
</tr></table></div></address></body>
</html>
